home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / FILES.D < prev    next >
Encoding:
Modula Definition  |  1990-09-15  |  7.3 KB  |  204 lines

  1. DEFINITION MODULE Files;
  2.  
  3. FROM MOSGlobals IMPORT Time, Date;
  4.  
  5. FROM FileBase IMPORT File0;
  6.  
  7. TYPE File = File0;
  8.  
  9.      Access = ( readOnly, writeOnly, readWrite,       (* Binärmodus *)
  10.                 readSeqTxt, writeSeqTxt, appendSeqTxt (* Textmodus  *) );
  11.  
  12.      ReplaceMode = ( noReplace, replaceOld );
  13.  
  14.  
  15. PROCEDURE Init (VAR f: File);
  16.   (*
  17.    * Initialisiert eine File-Variable. Danach darf jede beliebige
  18.    * Datei-Operation erfolgen, ohne daß mit undefinierten Ergebnissen
  19.    * gerechnet werden muß (dies ist sonst nur bei Open & Create
  20.    * gesichert).
  21.    * Eine Fehler-/Statusabfrage mit 'State' liefert daraufhin
  22.    * 'MOSGlobals.fFileNotOpen'.
  23.    *)
  24.  
  25. PROCEDURE Open (VAR f       : File;
  26.                 REF fileName: ARRAY OF CHAR;
  27.                     mode    : Access);
  28.   (*
  29.    * Wenn 'mode' = 'appendSeqTxt', dann wird, sofern die Datei auf Disk o.ä.
  30.    * geöffnet wird, nicht ab Anfang der Datei überschrieben, sondern am Ende
  31.    * angefügt.
  32.    * Wenn ein Fehler auftritt, bleibt die Datei geschlossen und 'State'
  33.    * liefert die Fehlernummer.
  34.    *)
  35.  
  36. PROCEDURE Create (VAR f       : File;
  37.                   REF fileName: ARRAY OF CHAR;
  38.                       mode    : Access;
  39.                       replMode: ReplaceMode);
  40.   (*
  41.    * Wenn 'replMode'='noReplace', wird ein Fehler geliefert, wenn schon
  42.    * eine Datei unter dem Namen existiert.
  43.    * Wenn 'replMode'='replaceOld', wird, falls 'mode'='writeSeqTxt', eine
  44.    * schon vorhandene Datei gelöscht, wenn 'mode'='appendSeqTxt', wird, wenn
  45.    * schon eine Datei existiert, diese nicht gelöscht sondern die Daten
  46.    * angehängt.
  47.    * Wenn ein Fehler auftritt, bleibt die Datei geschlossen und 'State'
  48.    * liefert die Fehlernummer.
  49.    *)
  50.  
  51. PROCEDURE Close (VAR f: File);
  52.   (*
  53.    * Schließt Datei und aktualisiert die Datums-/Zeitkennung, falls die
  54.    * Datei beschrieben wurde.
  55.    * Die Datei wird auf jeden Fall geschlossen (die File-Variable wird
  56.    * ungültig).
  57.    * Es ist unbedingt ratsam, das erfolgreiche Schließen mittels 'State'
  58.    * zu prüfen, da ein evtl. folgendes 'Open' oder 'Create' nicht, wie
  59.    * fast alle übrigen Dateifunktionen, selbsttätig auf vorangehende
  60.    * Fehler prüfen!
  61.    *)
  62.  
  63. PROCEDURE Remove (VAR f: File);
  64.   (*
  65.    * Schließt Datei, und löscht sie aus dem Directory, falls sie mit
  66.    * 'Create' angelegt wurde.
  67.    * Die Datei wird auf jeden Fall geschlossen (die File-Variable wird
  68.    * ungültig), evtl. aufgetretene Fehler sind über 'State' zu ermitteln.
  69.    *)
  70.  
  71.  
  72. PROCEDURE Flush (f: File);
  73.   (*
  74.    * Hat nur bei eigenen Anwendungen Sinn, falls die flush-Routinen
  75.    * eigener Unit-Treiber (siehe Handbuch sowie Modul 'FileBase')
  76.    * aufgerufen werden sollen.
  77.    *)
  78.  
  79.  
  80. PROCEDURE SetDateTime ( f: File; d: Date; t: Time );
  81.   (*
  82.    * Setzt Datums-/Zeitkennung einer geöffneten Datei.
  83.    *
  84.    * Funktioniert nur bei Dateien, die mit 'Open' - also
  85.    * nicht mit 'Create' - geöffnet wurden!
  86.    *)
  87.  
  88. PROCEDURE GetDateTime ( f: File; VAR d: Date; VAR t: Time );
  89.   (*
  90.    * Ermittelt Datums-/Zeitkennung einer geöffneten Datei.
  91.    *)
  92.  
  93.  
  94. PROCEDURE GetFileName (f: File; VAR name: ARRAY OF CHAR);
  95.   (*
  96.    * Liefert den Dateinamen, unter dem die Datei geöffnet wurde.
  97.    * 'name' sollte vom Typ 'FileStr' sein, damit der Name auf
  98.    * jedenfall hineinpaßt.
  99.    *)
  100.  
  101.  
  102. PROCEDURE AccessMode (f: File): Access;
  103.   (*
  104.    * Liefert den Zugriffsmodus bei der geöffneten Datei 'f'.
  105.    * Löst eine Fehlermeldung aus, wenn die Datei nicht offen ist
  106.    * oder ein Fehler (s. State-Funktion) ansteht!
  107.    *)
  108.  
  109. PROCEDURE DiskAccess (f: File): BOOLEAN;
  110.   (*
  111.    * Liefert TRUE, wenn die geöffnete Datei keine Unit, sondern
  112.    * eine Disk-Datei ist.
  113.    * Löst eine Fehlermeldung aus, wenn die Datei nicht offen ist
  114.    * oder ein Fehler (s. State-Funktion) ansteht!
  115.    *)
  116.  
  117.  
  118. PROCEDURE EOF (f: File): BOOLEAN;
  119.   (*
  120.    * Bei Dateien, die mit 'readSeqTxt' geöffnet sind, wird TRUE geliefert,
  121.    * wenn der letzte Lesezugriff das EOF-Zeichen (CTRL-Z, s.u.) mit einlas,
  122.    * bei Textdateien auf Disk o.ä. wird jedoch spätestens dann TRUE geliefert,
  123.    * wenn der letzte Lesezugriff über das Dateiende hinweg (!) erfolgte.
  124.    *
  125.    * Bei Binärdateien wird genau dann TRUE geliefert, wenn der Dateizeiger
  126.    * auf das Ende der Datei zeigt (Length(f)=Pos(f)) (dahinter kann er nicht
  127.    * zeigen; wenn doch, wird's kritisch).
  128.    *)
  129.  
  130. PROCEDURE SetEOFMode (f: File; checkChar: BOOLEAN; eofChar: CHAR);
  131.   (*
  132.    * Normalerweise wird bei Textdateien das Ende der Datei durch das
  133.    * Zeichen EOF (Ctrl-Z) erkannt oder bei Diskdateien auch durch das
  134.    * physikalische Dateiende.
  135.    * Mit dieser Funktion kann jeweils für die angegebene, offene Datei
  136.    * sowohl das Endezeichen ('eofChar') umdefiniert werden, als auch die
  137.    * Erkennung des Endezeichens ('checkChar') ganz unterdrückt werden.
  138.    * In dem Fall wird dann bei Diskdateien die Funktion EOF in jedem Fall
  139.    * nach überlesen des Dateiendes TRUE liefern; bei Dateien auf andere
  140.    * Devices, z.B. 'CON:', wird EOF dann nie TRUE liefern.
  141.    *)
  142.  
  143. PROCEDURE GetEOFMode (f: File; VAR checkChar: BOOLEAN; VAR eofChar: CHAR);
  144.   (* Liefert den gerade eingestellten Modus zum Erkennen des Dateiendes.
  145.    * Darf nur bei Textdateien, die mit 'readSeqTxt' geöffnet wurden,
  146.    * aufgerufen werden, sonst erfolgt Fehlermeldung.
  147.    * Die Voreinstellung, die bei jedem Öffnen einer Textdatei eingestellt
  148.    * wird, ist wie folgt: 'checkChar' = TRUE; 'eofChar' = 32C (=$1A, Ctrl-Z).
  149.    *)
  150.  
  151.  
  152. PROCEDURE State (f: File): INTEGER;
  153.   (*
  154.    * Liefert einen positiven Wert, wenn letzte Operation an der Datei keinen
  155.    * Fehler erzeugte, ansonsten eine negative Fehlernummer.
  156.    *
  157.    * Wenn die Datei nicht offen ist (nach Init, Close, Remove), wird
  158.    * 'MOSGlobals.fFileNotOpen' geliefert.
  159.    *)
  160.  
  161. PROCEDURE GetStateMsg (no: INTEGER; VAR msg: ARRAY OF CHAR);
  162.   (*
  163.    * Liefert in 'msg' einen String (Höchstlänge 32 Zeichen), der eine
  164.    * Beschreibung der zugehörigen Fehlernummer 'no' enthält.
  165.    * Funktion ist identisch mit 'Directory.GetErrMsg'.
  166.    *)
  167.  
  168. PROCEDURE ResetState (VAR f: File);
  169.   (*
  170.    * Diese Prozedur muß aufgerufen werden, wenn vorher mit Aufruf von
  171.    * 'State' ein Fehler erkannt wurde.
  172.    *)
  173.  
  174. PROCEDURE Abort (VAR f: File);
  175.   (*
  176.    * Unterbindet alle weiteren Operationen auf dieser Datei.
  177.    * Das bedeutet, daß jegliche weitere Funktionen, bis auf
  178.    * Close, Remove und Init, ignoriert werden - es treten dann
  179.    * auch keine Fehlermeldungen mehr auf.
  180.    * Diese Funktion kann beispielsweise nach Erkennnen eines
  181.    * fatalen Fehlers aufgerufen werden, anstatt weitere im Programmfluß
  182.    * auftretenden Dateioperationen auf andere Weise extra zu vermeiden.
  183.    * Nach Aufruf dieser Funktion wird die Datei wie eine Geschlossene
  184.    * behandelt: Read-Funktionen lesen keine Zeichen, EOF liefert immer
  185.    * TRUE.
  186.    *)
  187.  
  188. PROCEDURE SysOpen (VAR f: File; REF n: ARRAY OF CHAR; m: Access);
  189. PROCEDURE SysCreate (VAR f: File; REF n: ARRAY OF CHAR; m: Access; r: ReplaceMode);
  190.   (*
  191.    * Diese Funktionen arbeiten z.Zt. wegen Problemen mit dem GEMDOS
  192.    * nicht ordnungsgemäß und können daher nicht, wie beabsichtigt,
  193.    * verwendet werden.
  194.    *)
  195.  
  196.     (*****************************************
  197.      * Es folgen Funktionen, die nur system- *
  198.      * intern benutzt werden dürfen!         *
  199.      *****************************************)
  200.  
  201. PROCEDURE @CheckState (f: File): BOOLEAN;
  202.  
  203. END Files.
  204.